﻿using System;
using System.Configuration;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
using BONSAI.BLL;
using BONSAI.Common;
using BONSAI.Common.DTO;

namespace BONSAI.UI.Pages
{
    public partial class contact : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               BindInfo();
               CreateCaptcha();
            }
           
        }

        private void BindInfo()
        {
            string str = string.Empty;
            var lst = (new ContactsBO()).GetAll();
            foreach (var contactsDto in lst)
            {
                str += "<p>" + contactsDto.Name + "</p>";
                if(!string.IsNullOrEmpty(contactsDto.Address))
                {
                    str += "<p>Địa chỉ : " + contactsDto.Address + "</p>";
                }
                str += "<p>Điện thoại : " + contactsDto.Phone + "</p>";
            }
            ltrInfo.Text = str;
        }
        void ClearValueText()
        {
            txtFullName.Focus();
            txtFullName.Text = "";
            txtAddress.Text = "";
            txtSubject.Text = "";
            txtContent.Text = "";
            txtSecurity.Text = string.Empty;
            CreateCaptcha();
        }
        protected void btnSend_Click(object sender, EventArgs e)
        {
            var customerName = txtFullName.Text;
            var customerEmail = txtAddress.Text;
            var customerContactTitle = txtSubject.Text;
            var customerContent = txtContent.Text;

            if (string.IsNullOrEmpty(customerName))
            {
                txtFullName.Focus();
                return;
            }
            if (Session["captcha"] == null)
            {
                txtSecurity.Focus();
                return;
            }
            var captcha = Session["captcha"].ToString();
            if (!txtSecurity.Text.ToUpper().Equals(captcha.ToUpper()))
            {
                txtSecurity.Focus();
                txtSecurity.Text = string.Empty;
                CreateCaptcha();
                return;
            }

            try
            {
                //create mailInfo
                var mailInfo = new ContactMailInfo
                                   {
                                       SystemDisplayName =
                                           ConfigurationManager.AppSettings[BONSAIConstants.COMPANY_NAME],
                                       Message = (customerContent),
                                       Email = customerEmail,
                                       Name = customerName,
                                       Subject = customerContactTitle,
                                       EmailTemplate =
                                           Server.MapPath("~\\" +
                                                          ConfigurationManager.AppSettings[
                                                              BONSAIConstants.CONTACT_US_MAIL_TEMPLATE]),
                                       EmailTo = ConfigurationManager.AppSettings[BONSAIConstants.COMPANY_EMAIL]
                                   };

                // send mail
                BONSAIUtils.EmailUtil.SendContactMail(mailInfo);
                ClearValueText();
                WebMBox.Show("Gởi mail thành công");
                return;
            }
            catch (Exception)
            {
                WebMBox.Show("Vui lòng xem lại các thông tin trên");
                CreateCaptcha();
                return;
            }
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            ClearValueText();
        }
        private void CreateCaptcha()
        {
            try
            {
                //string[] fonts = { "Arial Black", "Lucida Sans Unicode", "Comic Sans MS" };
                string[] fonts = { "Arial" };
                const byte length = 5;
                // chuỗi để lấy các kí tự sẽ sử dụng cho captcha
                const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
                using (var bmp = new Bitmap(120, 30))
                {
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        // Tạo nền cho ảnh dạng sóng
                        var brush = new HatchBrush(HatchStyle.BackwardDiagonal, Color.White, Color.Yellow);
                        g.FillRegion(brush, g.Clip);
                        // Lưu chuỗi captcha trong quá trình tạo
                        var strCaptcha = new StringBuilder();
                        var rand = new Random();
                        for (int i = 1; i <= length; i++)
                        {
                            // Lấy kí tự ngẫu nhiên từ mảng chars
                            string str = chars[rand.Next(chars.Length)].ToString();
                            strCaptcha.Append(str);
                            // Tạo font với tên font ngẫu nhiên chọn từ mảng 
                            //var font = new Font(fonts[rand.Next(fonts.Length)], 12,
                            // FontStyle.Italic); //FontStyle.Strikeout | 
                            var font = new Font("Arial", 12, FontStyle.Italic);
                            // Lấy kích thước của kí tự
                            var size = g.MeasureString(str, font);
                            // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                            g.DrawString(str, font,
                                // Brushes.Black, i * size.Width+3, rand.Next(2, 10));
                                         Brushes.Black, new PointF(i * 15, rand.Next(2, 10)));
                            font.Dispose();
                        }

                        //khởi tạo khi trùng tên khi refresh
                        string tmp = Guid.NewGuid().ToString();
                        //ktra  xao all

                        if (Session["path"] != null && File.Exists(Session["path"].ToString()))
                        {
                            try
                            {
                                File.Delete(Session["path"].ToString());
                            }
                            catch (Exception ex)
                            {
                                ex.ToString();
                            }
                        }
                        // Lưu captcha vào session
                        Session["captcha"] = strCaptcha.ToString();
                        // Lưu ảnh vào thư mục captcha với tên ảnh dựa theo IP
                        string path = "~/Photos/Captcha/" + Request.UserHostAddress + tmp + ".gif";
                        bmp.Save(Server.MapPath(path), ImageFormat.Gif);
                        Session["path"] = Server.MapPath(path);
                        imgcaptcha.ImageUrl = path;
                    }
                }
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }


    }
}
